home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
zugabe
/
va45
/
visual45
/
library
/
extend
/
file_sel.s
< prev
next >
Wrap
Text File
|
1998-05-23
|
4KB
|
159 lines
;------------------------------------------------------------------------------
; Method name : -
; Asm label : GWVA_FILE_SELECTOR
; Description : Affiche le selecteur de fichier GEM
;
; in : a0.l = pointeur sur le texte d'invitation (terminé par un 0.b) : 35 chars max.
; in : a1.l = pointeur sur le masque de choix (terminé par un 0.b)
; in : a2.l = pointeur sur le pathname complet de l'ancienne sélection ou 0.l sinon
; out : a0.l = pointeur sur le nom de fichier (terminé par un 0.b)
; out : a1.l = pointeur sur le chemin (terminé par un 0.b)
; out : a2.l = pointeur sur le pathname complet (terminé par un 0.b)
; out : d0.w = code retour du fsel (0 si annule, <0 pour erreur, >0 pour OK)
;
; 15/03/98 : Création
;------------------------------------------------------------------------------
GWVA_FILE_SELECTOR:
; lea texte,a0 ; 35 chars max.
; lea mask,a1 ; 18 caracteres max
; lea oldpathname,a2 ; A:\TEMP\ ou #0.l
; bsr GWVA_FILE_SELECTOR
; tst d0
; beq.s annule
; bmi.s erreur_gemdos
; -> a0 : nom du fichier
; -> a1 : drive:path\ du fichier
; -> a2 : drive:path\filename.ext
ifd MDL_COLORS
save.l a0-a2
lea GWVA_ROOT_TMP_PALETTE,a0
bsr GWVA_ROOT_STORE_VDI_PALETTE
bsr GWVA_ROOT_SET_DESK_PALETTE
load.l a0-a2
endc ; ifd MDL_COLORS
cmp.l #0,a2
bne.s .old_path_given
.old_path_not_given:
;---------
; S'il n'y a pas de path, on le reconstruit
save.l a0-a1
DGETDRV
add.b #'A',d0
lea GWVA_FILE_FSEL_DISK_PATH,a2
move.b d0,(a2)+
move.b #':',(a2)+ ; A: ou B: ...
save.l a2
DGETPATH #0,(a2)
load.l a2
.trouv_0: tst.b (a2)+
bne.s .trouv_0 ; on rajoute \ à la fin et un 0.b
move.w #'\'*256,-1(a2)
load.l a0/a1
COPY_STRING_0 a1,a2 ; on ajoute le masque
bra.s .call_fsel
;---------
.old_path_given:
tst.b (a2)
beq.s .old_path_not_given
lea GWVA_FILE_FSEL_DISK_PATH,a3
COPY_STRING_0 a2,a3 ; on recopie le path
.find_a: cmp.b #'\',-(a3)
bne.s .find_a
lea 1(a3),a3 ; on remonte au dernier \
save.l a3
lea GWVA_FILE_FSEL_FILENAME,a4
COPY_STRING_0 a3,a4 ; on recopie le nom de fichier
load.l a3
COPY_STRING_0 a1,a3 ; à la place on met le masque
.call_fsel: fsel_exinput #GWVA_FILE_FSEL_DISK_PATH,#GWVA_FILE_FSEL_FILENAME,a0
tst.w d0
beq .fsel_failed
move.w int_out+2,d0 ; 'ANNULE','CONFIRME'
lea GWVA_FILE_FSEL_DISK_PATH,a0
.pas0: tst.b (a0)+
bne.s .pas0
.pas_trouv_d:
cmpi.b #'\',-(a0)
beq.s .found_slash
cmpi.b #':',(a0)
bne.s .pas_trouv_d
addq.l #1,a0
move.b #'\',(a0) ; root
.found_slash:clr.b 1(a0) ; chemin fini par \ 0.b
* lea GWVA_FILE_FSEL_DISK_PATH,a0 ; impossible en théorie
* cmpi.b #':',1(a0) ; ??
* bne.s .pas_driv ; ??
save.w d0
lea GWVA_FILE_FSEL_DISK_PATH,a0
bsr GWVA_SET_PATH
move d0,d1
load.w d0
tst d1
beq.s .no_problem
move d1,d0
bra.s .fin_fsel
.no_problem:
* lea GWVA_FILE_FSEL_FILENAME,a0
* tst.b (a0)
* bne.s .o_k ; si plante ouvrir n'importe (le 1er)
* move.l #'*.*'*256,(a0) ; *.* 0
*.o_k:
lea GWVA_FILE_FSEL_DISK_PATH,a1
lea GWVA_FILE_FSEL_FILE_PATHNAME,a2
COPY_STRING_0 a1,a2
lea -1(a2),a2
lea GWVA_FILE_FSEL_FILENAME,a0
COPY_STRING_0 a0,a2
lea GWVA_FILE_FSEL_FILENAME,a0
lea GWVA_FILE_FSEL_DISK_PATH,a1
lea GWVA_FILE_FSEL_FILE_PATHNAME,a2
.fin_fsel:
.fsel_failed:
ifd MDL_COLORS
save.l d0/a0-a2
lea GWVA_ROOT_TMP_PALETTE,a0
bsr GWVA_ROOT_SET_VDI_PALETTE
load.l d0/a0-a2
endc ; ifd MDL_COLORS
rts
;----------------------------------
BSS
GWVA_FILE_FSEL_DISK_PATH: ds.b GWVA_ROOT_MAX_PATH_LENGTH
GWVA_FILE_FSEL_FILE_PATHNAME: ds.b GWVA_ROOT_MAX_PATH_LENGTH
GWVA_FILE_FSEL_FILENAME: ds.b GWVA_ROOT_MAX_PATH_LENGTH ; normalement 8+1+3+1, sauf avec les noms étendus, alors ...
even
TEXT